package capaPresentacion.server;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import capaPresentacion.client.WorldsTrainerWebService;
import capaPresentacion.shared.ComentarioDTO;
import capaPresentacion.shared.InfoRutaDTO;
import capaPresentacion.shared.RutaDTO;
import capaPresentacion.shared.RutaFicheroDTO;
import capaPresentacion.shared.UsuarioDTO;
import capaServicios.ServicioRuta;
import capaServicios.ServicioUsuario;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

@SuppressWarnings("serial")
public class WorldsTrainerWebServiceImpl extends RemoteServiceServlet implements
		WorldsTrainerWebService {

	@Override
	public String loguearse(String email, String contrasenya)
			throws IllegalArgumentException {
		HttpServletRequest request = this.getThreadLocalRequest();
		if ((email.equals("administrador"))
				&& (contrasenya.equals("rafajuandy"))) {
			request.getSession().setAttribute("Administrador", email);
			return "administrador";
		} else {
			ServicioUsuario servicioUsuario = new ServicioUsuario();
			boolean resultado = servicioUsuario.loguear(email, contrasenya);
			if (resultado) {
				request.getSession().setAttribute("Usuario", email);
				return "normal";
			} else
				throw new IllegalArgumentException("Logueo erroneo");
		}
	}

	@Override
	public void registrarse(UsuarioDTO usuarioDTO)
			throws IllegalArgumentException {
		ServicioUsuario servicioUsuario = new ServicioUsuario();
		servicioUsuario.registrar(usuarioDTO);
		HttpServletRequest request = this.getThreadLocalRequest();
		request.getSession().setAttribute("Usuario", usuarioDTO.getEmail());
	}

	@Override
	public List<UsuarioDTO> obtenerAmigosDTO() throws IllegalArgumentException {
		HttpServletRequest request = this.getThreadLocalRequest();
		String emailUsuario = (String) request.getSession().getAttribute(
				"Usuario");
		ServicioUsuario servicioUsuario = new ServicioUsuario();
		return servicioUsuario.obtenerAmigos(emailUsuario);
	}

	@Override
	public void logout() throws IllegalArgumentException {
		HttpServletRequest request = this.getThreadLocalRequest();
		request.removeAttribute("Usuario");
	}

	@Override
	public List<InfoRutaDTO> obtenerInfoRutasDTO()
			throws IllegalArgumentException {
		HttpServletRequest request = this.getThreadLocalRequest();
		String emailUsuario = (String) request.getSession().getAttribute(
				"Usuario");
		ServicioRuta servicioRuta = new ServicioRuta();
		return servicioRuta.obtenerMisInfoRutas(emailUsuario);
	}

	@Override
	public void borrarComentarioDTO(long idComentario)
			throws IllegalArgumentException {
		ServicioUsuario servicioUsuario = new ServicioUsuario();
		servicioUsuario.borrarComentario(idComentario);
	}

	@Override
	public List<UsuarioDTO> buscarUsuariosDTO(String cadena)
			throws IllegalArgumentException {
		ServicioUsuario servicioUsuario = new ServicioUsuario();
		return servicioUsuario.buscarUsuarios(cadena);
	}

	@Override
	public void darseBaja() throws IllegalArgumentException {
		HttpServletRequest request = this.getThreadLocalRequest();
		String emailUsuario = (String) request.getSession().getAttribute(
				"Usuario");
		ServicioUsuario servicioUsuario = new ServicioUsuario();
		servicioUsuario.darBaja(emailUsuario);
	}

	public void borrarUsuario(String email) throws IllegalArgumentException {
		ServicioUsuario servicioUsuario = new ServicioUsuario();
		servicioUsuario.darBaja(email);
	}

	@Override
	public void hacerAmigo(String emailAmigo) throws IllegalArgumentException {
		HttpServletRequest request = this.getThreadLocalRequest();
		String emailUsuario = (String) request.getSession().getAttribute(
				"Usuario");
		ServicioUsuario servicioUsuario = new ServicioUsuario();
		servicioUsuario.hacerAmigo(emailUsuario, emailAmigo);
	}

	@Override
	public void hacerComentarioDTO(String texto, Date fecha, long idRuta)
			throws IllegalArgumentException {
		HttpServletRequest request = this.getThreadLocalRequest();
		String emailUsuario = (String) request.getSession().getAttribute(
				"Usuario");
		ServicioUsuario servicioUsuario = new ServicioUsuario();
		servicioUsuario.hacerComentario(texto, fecha, idRuta, emailUsuario);
	}

	@Override
	public void quitarAmigo(String emailAmigo) throws IllegalArgumentException {
		HttpServletRequest request = this.getThreadLocalRequest();
		String emailUsuario = (String) request.getSession().getAttribute(
				"Usuario");
		ServicioUsuario servicioUsuario = new ServicioUsuario();
		servicioUsuario.deshacerAmigo(emailUsuario, emailAmigo);
	}

	@Override
	public void anyadirRuta(RutaDTO rutaDTO, InfoRutaDTO infoRutaDTO)
			throws IllegalArgumentException {
		ServicioRuta servicioRuta = new ServicioRuta();
		servicioRuta.anyadirRuta(rutaDTO, infoRutaDTO);
	}

	@Override
	public void borrarRuta(Long idRuta) throws IllegalArgumentException {
		ServicioRuta servicioRuta = new ServicioRuta();
		servicioRuta.borrarRuta(idRuta);
	}

	@Override
	public List<RutaDTO> buscarRuta(String cadena)
			throws IllegalArgumentException {
		ServicioRuta servicioRuta = new ServicioRuta();
		return servicioRuta.buscarRuta(cadena);
	}

	@Override
	public void eliminarInfo(long idInfoRuta) throws IllegalArgumentException {
		ServicioRuta servicioRuta = new ServicioRuta();
		servicioRuta.eliminarInfo(idInfoRuta);
	}

	@Override
	public List<ComentarioDTO> obtenerComentariosRuta(long idRuta)
			throws IllegalArgumentException {
		ServicioRuta servicioRuta = new ServicioRuta();
		return servicioRuta.obtenerComentariosRuta(idRuta);
	}

	@Override
	public RutaFicheroDTO obtenerInfoRuta(long idInfo)
			throws IllegalArgumentException {
		ServicioRuta servicioRuta = new ServicioRuta();
		return servicioRuta.obtenerInfoRutaConFichero(idInfo);
	}

	@Override
	public void logoutAdministrador() throws IllegalArgumentException {
		HttpServletRequest request = this.getThreadLocalRequest();
		request.removeAttribute("administrador");
	}

	@Override
	public List<InfoRutaDTO> obtenerInfoRutasUsuarioAmigo(String email)
			throws IllegalArgumentException {
		ServicioRuta servicioRuta = new ServicioRuta();
		return servicioRuta.obtenerMisInfoRutas(email);
	}

	@Override
	public RutaFicheroDTO obtenerDatosRuta(long idRuta)
			throws IllegalArgumentException {
		ServicioRuta servicio = new ServicioRuta();
		return servicio.obtenerDatosRutaConFichero(idRuta);
	}

	@Override
	public void modificarUsuario(UsuarioDTO usuarioDTO)
			throws IllegalArgumentException {
		ServicioUsuario servicio = new ServicioUsuario();
		servicio.modificarUsuario(usuarioDTO);
	}

	@Override
	public UsuarioDTO obtenerUsuario() throws IllegalArgumentException {
		ServicioUsuario servicio = new ServicioUsuario();
		HttpServletRequest request = this.getThreadLocalRequest();
		String emailUsuario = (String) request.getSession().getAttribute(
				"Usuario");
		return servicio.obtenerUsuario(emailUsuario);
	}

	@Override
	public String obtenerEmailUsuario() {
		HttpServletRequest request = this.getThreadLocalRequest();
		String emailUsuario = (String) request.getSession().getAttribute(
				"Usuario");
		return emailUsuario;
	}
}
